package com.itheima.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.ExceptionConfig.OccupyException;
import com.itheima.config.R;
import com.itheima.mapper.DishMapper;
import com.itheima.pojo.Category;
import com.itheima.pojo.Dish;
import com.itheima.pojo.Setmeal;
import com.itheima.service.CategoryService;
import com.itheima.service.DishService;
import com.itheima.service.SetmealService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * 分类管理
 */

@RestController
@RequestMapping("/category")
@Slf4j
public class CategoryController {

    // 分类表
    @Autowired
    private CategoryService categoryService;

    // 菜品表
    @Autowired
    private DishService dishService;

    // 套餐表
    @Autowired
    private SetmealService setmealService;


    /**
     *  分页查询 没有模糊查询
     * @param page
     * @param pageSize
     * @return
     */
    @GetMapping("/page")
    public R<Page> page(Integer page,Integer pageSize){

        Page<Category> paging = new Page<>(page,pageSize);

        Page<Category> categoryPage = categoryService.page(paging);

        return R.success(categoryPage);
    }

    /**
     * 添加菜品分类
     * @param category
     * @return
     */
    @PostMapping
    public R save(@RequestBody Category category){

        LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Category::getName,category.getName());

        // 查看数据库是否有相同名字的 分类菜品
        categoryService.getOne(queryWrapper);

        //添加菜品分配
        categoryService.save(category);
        return R.success("新增成功");
    }

    /**
     * 修改菜品/套餐分类数据
     * @param category
     * @return
     */
    @PutMapping
    public R update(@RequestBody Category category){
        categoryService.updateById(category);
        return R.success("修改成功");
    }

    /**
     * 删除菜品信息
     * @param id
     * @return
     */
    @DeleteMapping
    public R delete(Long id){
        //  通过主表ID  创建菜品表比对 CategoryId 的条件
        LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();
        dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);

        // 通过上面的条件查询 菜品表是否有数据   有数据就抛出异常，因为菜品表有数据绑定分类ID
        int dish = dishService.count(dishLambdaQueryWrapper);
        if (dish > 0){
            throw new OccupyException("菜品信息有数据 没法删除");
        }

        //  通过主表ID  创建套餐表比对 CategoryId 的条件
        LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();
        setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId,id);
        int setmeal = setmealService.count(setmealLambdaQueryWrapper);
        if (setmeal > 0){
            throw new OccupyException("套餐信息有数据 没法删除");
        }


        // 根据ID删除菜品分类
        categoryService.removeById(id);
        return R.success("删除成功");
    }


    /**
     * 菜品管理中添加菜品中的菜品分类列表查询
     * @param type
     * @return
     */
    @GetMapping("/list")
    public R type(Integer type){

        LambdaQueryWrapper<Category> lambdaQueryWrapper = new LambdaQueryWrapper<>();

        // type 只有可能是 1 或者 2   这里 type不为空  就表示  1和 2 都会查 说明查询全部
        lambdaQueryWrapper.eq(type != null,Category::getType,type);

        List<Category> list = categoryService.list(lambdaQueryWrapper);

        return R.success(list);
    }
}
